operatori:
OR / AND / XOR
i tre operatori funzionano come gli operatori logici solo che agiscono sul singolo bit
AND &
solo se entrambi i bit sono 1 uguale a 1
nella funzione booleana prodotto logico (AND) comanda lo zero logico; é sufficiente che uno dei due operandi valga zero per avere come risultato zero (esattamente come nel prodotto aritmetico)
int a = 147; | 1 0 0 1 0 0 1 1 |
int b = 97; | 0 1 1 0 0 0 0 1 |
int c = a&b; = 1 | 0 0 0 0 0 0 0 1 |
OR |
se uno dei due bit o entrambi é 1 allora uguale a 1
int a = 147; | 1 0 0 1 0 0 1 1 |
int b = 97; | 0 1 1 0 0 0 0 1 |
int c = a|b; = 243 | 1 1 1 1 0 0 1 1 |
XOR ^
come OR ma se entrambi sono 1 allora uguale 0
int a = 147; | 1 0 0 1 0 0 1 1 |
int b = 97; | 0 1 1 0 0 0 0 1 |
int c = a^b; = 232 | 1 1 1 1 0 0 1 0 |
scorrimenti (shift)
l'operatore fa scorrere a destra o sinistra i bit di un numero di posizioni specificato.
scorrimento sinistra <<
saranno aggiunti dei 0 nei posti vuoti a destra, i bit usciti andranno persi.
int a = 42; | 0 0 1 0 1 0 1 0 |
int c = a<<1 = 84 | 0 1 0 1 0 1 0 0 |
scorrimento destra >>
saranno aggiunti dei 0 o 1 nei posti vuoti a sinistra a seconda se valore del primo bit sia 0 o 1, i bit usciti andranno persi.
int a = 43; | 0 0 1 0 1 0 1 1 |
int c = a>>0 = 21 | 0 0 0 1 0 1 0 1 |
int a = -86; | 1 0 1 0 1 0 1 0 |
int c = a>>1 = -43 | 1 1 0 1 0 1 0 1 |
complemento a uno
inverte i bit, ovvero trasforma gli 1 in 0 e gli 0 in 1
i = 10; | 0 0 0 0 1 0 1 0 |
j = ~i; = 245 | 1 1 1 1 0 1 0 1 |